﻿if exists (select name from sysobjects where name ='spu_huynhanthuongsanpham')
	drop proc spu_huynhanthuongsanpham
go

create proc spu_huynhanthuongsanpham(@IDNguoiDungSanPham int, @IDSanPham int, @SoLuong int, @IDNguoiDung int, @TongDiemThuong int)
as
	begin tran
	set tran isolation level SERIALIZABLE;
	declare @IDSanPhamHuy int,@IDNguoiDungSanPhamHuy int,@ID int
	select @IDSanPhamHuy=ID from SanPham with (UPDLOCK) where ID=@IDSanPham and ThoiGianBatDauBan<=GETDATE() and ThoiGianKetThucBan>=GETDATE()
	select @IDNguoiDungSanPhamHuy=ID from NguoiDung_SanPham ndsp with (UPDLOCK) where ndsp.ID=@IDNguoiDungSanPham
	select @ID=ID from NguoiDung_SanPham with (UPDLOCK) where ID=@IDNguoiDungSanPham and IDTrangThaiSanPham=1
	if(@IDNguoiDungSanPhamHuy is null)
	begin
		raiserror(N'Phần thưởng này đã bị huỷ nhận thưởng',16,1)
		rollback tran
		return
	end
	if(@IDSanPhamHuy is null)
	begin
		raiserror(N'Không thể huỷ nhận thưởng vì sản phẩm đã hết thời hạn bán',16,1)
		rollback tran
		return
	end
	if(@ID is null)
	begin
		raiserror(N'Không thể huỷ nhận thưởng vì sản phẩm đã được nhận',16,1)
		rollback tran
		return
	end
	update NguoiDung set DiemThuong=DiemThuong+@TongDiemThuong where ID=@IDNguoiDung
	update SanPham set SoLuong=SoLuong+@SoLuong where ID=@IDSanPham
	delete from NguoiDung_SanPham where ID=@IDNguoiDungSanPham
	if(@@ERROR<>0)
	begin
		raiserror(N'Đã có lỗi trong quá trình huỷ nhận thưởng sản phẩm',16,1)
		rollback tran
		return
	end
	commit tran
go